[アップデート] Amazon CloudWatch Synthetics の各 API に追加された ProvisionedResourceCleanup 属性の挙動を調べてみた

[アップデート] Amazon CloudWatch Synthetics の各 API に追加された ProvisionedResourceCleanup 属性の挙動を調べてみた

Clock Icon2024.11.09

いわさです。

先日の AWS CLI v1.35.22 のアップデートで CloudWatch Synthetics の API が更新されたとアナウンスがありました。

https://github.com/aws/aws-cli/commit/781afaa94a7fdb7e35611a9e543806c836ebc77f

更新の内容として、Canary に ProvisionedResourceCleanup という属性が追加され、これを使って Canary 削除時に関連リソースも自動削除するかどうか判断されるようです。

ただ一方で、CloudWatch Synthetics には Canary 削除時に Lambda 関数などの関連リソースも削除するかどうか指定するオプションが既にあります。

https://dev.classmethod.jp/articles/amazon-cloudwatch-synthetics-support-canary-resources-deletion/

以前のアップデートと今回のアップデートの違いや関わりを調べてみましたので紹介します。

今後の新規作成 Canary は AUTOMATIC となるようだ

はじめに、本日時点でマネジメントコンソールから Canary を作成する時に ProvisionedResourceCleanup を指定するオプションはありません。

そこで、アップデート前から存在していた Canary と今回新しくコンソールから作成した Canary の ProvisionedResourceCleanup の値を比較してみました。

結論として、アップデート前に作成していた Canary はOFF、アップデート後に新規作成した Canary は AUTOMATICが設定されていました。今後は新規作成時にはデフォルトがAUTOMATICとなるようです。

# 既存 Canary
% aws-v1 synthetics get-canary --name hoge0917canary
{
    "Canary": {
        "Id": "27491bef-8f40-4e3c-9432-8afa7d6a9145",
        "Name": "hoge0917canary",

:

        "RuntimeVersion": "syn-nodejs-puppeteer-9.0",
        "ProvisionedResourceCleanup": "OFF",
        "Tags": {
            "blueprint": "heartbeat",
            "hoge": "0917"
        }
    }
}

# 新規作成した Canary
% aws-v1 synthetics get-canary --name hoge1109canary
{
    "Canary": {
        "Id": "a388d3c4-686c-4ea3-a30b-e67cfe38249c",
        "Name": "hoge1109canary",

:

        "RuntimeVersion": "syn-nodejs-puppeteer-9.1",
        "ProvisionedResourceCleanup": "AUTOMATIC",
        "Tags": {
            "blueprint": "heartbeat"
        }
    }
}

本日時点のコンソールの Canary 削除仕様

続いて Canary を削除する操作を確認してみます。
削除時に Lambda 関数とレイヤーも併せて削除するか以前は選択が出来たのですが、いつからなのか現在は任意ではなくて必須で削除する必要があるようです。

46984074-B198-411C-9480-A4AA8E1C807B_1_105_c.jpeg

試しにこのまま削除してみます。
API 上は DeleteCanary が実行されるのですが、コンソールから実行した場合は次のように deleteLambda オプションがtrueとなっていることがわかります。

{
    "eventVersion": "1.09",

:

    "eventSource": "synthetics.amazonaws.com",
    "eventName": "DeleteCanary",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "203.0.113.1",
    "userAgent": "Apache-HttpClient/UNAVAILABLE (Java/1.8.0_432)",
    "requestParameters": {
        "deleteLambda": "true",
        "name": "hoge0725canary"
    },
    "responseElements": null,
    "requestID": "d3a4fa85-5dbc-49a5-8386-877e79d6b999",
    "eventID": "09449cad-3652-4dd4-9748-b204eced3f9e",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}

この deleteLambda オプションにtrueを指定すると、ProvisionedResourceCleanupOFFだろうとAUTOMATICだろうと、Canary に紐づいた Lambda 関数は自動削除されます。

どうやら、マネジメントコンソールから Canary を削除するという点においては今回の ProvisionedResourceCleanup に関係なく Lambda も一緒に削除するという挙動に現状はなっているようです。

API から削除してみる

では、今度はマネジメントコンソールからではなく AWS API から DeleteCanary を呼び出してみます。
比較のために UpdateCanary で ProvisionedResourceCleanup の値が異なるものを用意します。

# 更新
% cat hoge.json
{
    "Name": "hoge1109canary",
    "ProvisionedResourceCleanup": "OFF"
}
% aws-v1 synthetics update-canary --cli-input-json file://hoge.json

# hoge1109canary は OFF
% aws-v1 synthetics get-canary --name hoge1109canary
{
    "Canary": {
        "Id": "a388d3c4-686c-4ea3-a30b-e67cfe38249c",
        "Name": "hoge1109canary",

:

        "RuntimeVersion": "syn-nodejs-puppeteer-9.1",
        "ProvisionedResourceCleanup": "OFF",
        "Tags": {
            "blueprint": "heartbeat"
        }
    }
}

# hoge1109canary は AUTOMATIC
% aws-v1 synthetics get-canary --name hoge1109canary
{
    "Canary": {
        "Id": "a388d3c4-686c-4ea3-a30b-e67cfe38249c",
        "Name": "hoge1109canary",

:

        "RuntimeVersion": "syn-nodejs-puppeteer-9.1",
        "ProvisionedResourceCleanup": "AUTOMATIC",
        "Tags": {
            "blueprint": "heartbeat"
        }
    }
}

この時点では 2 つとも Lambda が存在する状態ですね。

1131A357-436F-466F-A349-AC7D3FFEE679.png

では削除します。
この時、deleteLambda オプションは明示的に指定しません。その場合はデフォルトはfalseとなります。

% aws-v1 synthetics delete-canary --name hoge1109canary
% aws-v1 synthetics delete-canary --name hoge1109canar

マネジメントコンソールを確認してみると、Canary はどちらも削除されています。

FA5A0355-8EF9-4B24-A8BB-3A092CFBC6D2.png

Lambda は...

8B70F76F-194D-440A-917F-27D35DC3E647.png

ProvisionedResourceCleanup がOFFのほうは削除されていないですね。なるほど。
deleteLambda オプションの変更や省略が可能な API 呼び出しの場合は ProvisionedResourceCleanup によって Lambda がどうなるかコントロールされていることが確認出来ました。

さいごに

本日は Amazon CloudWatch Synthetics の各 API に追加された ProvisionedResourceCleanup 属性の挙動を調べてみました。

おそらくですが、外部 API で Canary の作成や削除を操作するケース(独自で実装していたり、Terraform などを使っていたり)でも基本的に今後は Canary と Lambda を併せて削除させたい感じなのかなと思いました。

まず、マネジメントコンソールの操作については特に気にするところはないのではないかなと思いますので、こんなアップデートがあったんだなくらい頭の片隅に置いておいてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.